package com.situ.skymallproductapi.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.situ.model.Product;
import com.situ.model.search.ProductSearchBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

@Mapper
public interface ProductMapper extends BaseMapper<Product> {
    /*
      查询所有商品 条件查询
      @return 商品分页列表
     */
    default Page<Product> getList(Page<Product> page, ProductSearchBean searchBean) {
        QueryWrapper<Product> qw = new QueryWrapper<>(searchBean);
        if (searchBean.getMinPrice() != null) {
            qw.ge("price", searchBean.getMinPrice());
        }
        if (searchBean.getMaxPrice() != null) {
            qw.le("price", searchBean.getMaxPrice());
        }
        return selectPage(page, qw);
    }

    /*
      根据分类id查询商品
      @param categoryId 分类id
      @return 商品列表
     */
    List<Product> getByCategoryId(Integer categoryId);

    /**
     * 秒杀商品开关
     * @param id 商品id
     * @param status 0: 关闭 1: 开启
     * @return 是否成功
     */
    int updateSeckill(Integer id, @Param("status") Integer status);

    /**
     * 上架商品开关
     * @param id 商品id
     * @param status 0: 关闭 1: 开启
     * @return 是否成功
     */
    int updateOnSale(Integer id, @Param("status") Integer status);


    /**
     * 修改库存
     * @param productId 商品id
     * @param delta 增加的库存数量
     */
    @Update("update product set stock=stock+#{delta} where id=#{productId}")
    int updateForIncrementQty(@Param("productId") Integer productId,
                              @Param("delta") int delta);

    /**
     * 扣减库存
     * @param productId 商品id
     * @param delta 扣减的库存数量
     */
    int decrementStock(Integer productId, int delta);
}
